"""
UrlError：主机地址不存在问题

HTTPError：请求资源路径问题，即接口问题。

异常的捕获 永远都是 子类在上，父类在下。如果在编写 try...except 异常时，将父类写在子类之下，则会导致异常显示错误！！

记忆：
url：协议 + 主机 + 端口号 + 请求 + 参数 + 锚点  可见 URLError 是 HTTPError 的父类
"""

import urllib.request
import urllib.error

# 可以正常访问
# url = 'https://blog.csdn.net/weixin_44463441/article/details/112465773'

# 将请求资源的路径故意写错
# 报 HTTPError 异常：urllib.error.HTTPError: HTTP Error 404: Not Found
url = 'https://blog.csdn.net/weixin_44463441/article/details/112465773_1'

# 再故意将 主机号 写错，即不存在的主机
# 报 URLError 异常
# url = 'https://good.csdn.net/weixin_44463441/article/details/112465773'


try:
	response = urllib.request.urlopen(url)
	resp_data = response.read().decode('utf-8')
# print(resp_data)
# except urllib.error.HTTPError:
# 	print('这是 HTTPError 异常！')
# except urllib.error.URLError:
# 	print('这是 URLError 异常！')

# 此时明明应该是 HTTPError 异常，这里却报 URLError 异常
# 可见 这两个异常的关系是：URLError 异常是父类，HTTPError 是子类
# 在 Python 异常捕获中：子类在上，父类在下，否则，父类会覆盖掉子类异常，导致最后异常显示错误！
except urllib.error.URLError:
	print('这是 URLError 异常！')
except urllib.error.HTTPError:
	print('这是 HTTPError 异常！')
